import subprocess
import os
import time

class ADBRecorderLibrary:
    ROBOT_LIBRARY_SCOPE = "GLOBAL"  # 定义库的作用域为全局

    def __init__(self, output_dir=".", device_id=None):
        """
        初始化ADB录屏工具。
        :param output_dir: 视频保存的本地目录，默认为当前目录。
        :param device_id: 连接的设备ID（可选）。如果未指定，将使用默认设备。
        """
        self.output_dir = output_dir
        self.device_id = device_id

    def _run_adb_command(self, command):
        """
        执行ADB命令。
        :param command: ADB命令字符串。
        :return: 命令的输出。
        """
        if self.device_id:
            command = f"adb -s {self.device_id} {command}"
        else:
            command = f"adb {command}"
        return subprocess.run(command, shell=True, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    def start_recording(self, filename="recording.mp4", duration=30, resolution=None, bitrate=None):
        """
        开始录制屏幕。
        :param filename: 输出视频文件名（保存在设备上）。
        :param duration: 录制时长（秒）。
        :param resolution: 视频分辨率，格式为"宽度x高度"（可选）。
        :param bitrate: 视频比特率（可选）。
        """
        options = []
        if duration:
            options.append(f"--time-limit {duration}")
        if resolution:
            options.append(f"--size {resolution}")
        if bitrate:
            options.append(f"--bit-rate {bitrate}")

        options_str = " ".join(options)
        command = f"shell screenrecord {options_str} /sdcard/{filename}"
        self._run_adb_command(command)
        print(f"Recording started. Duration: {duration} seconds.")

    def stop_recording(self):
        """
        停止录制（仅在未设置时长时需要）。
        """
        self._run_adb_command("shell pkill screenrecord")
        print("Recording stopped.")

    def pull_video(self, filename="recording.mp4"):
        """
        将录制的视频从设备传输到本地。
        :param filename: 设备上的视频文件名。
        :return: 本地保存路径。
        """
        local_path = os.path.join(self.output_dir, filename)
        self._run_adb_command(f"pull /sdcard/{filename} {local_path}")
        print(f"Video saved to {local_path}")
        return local_path

    def delete_video_on_device(self, filename="recording.mp4"):
        """
        删除设备上的视频文件。
        :param filename: 设备上的视频文件名。
        """
        self._run_adb_command(f"shell rm /sdcard/{filename}")
        print(f"Deleted {filename} from device.")